package com.ruoyi.worker.mapper.attendance;

import com.ruoyi.worker.domain.TermWorker;
import com.ruoyi.worker.domain.workAttendance.RzScheduleStaffPlan;
import com.ruoyi.worker.domain.workAttendance.vo.SchedulePlanVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @ClassTitle: RzScheduleStaffPlan
 * @ProjectName guiyang
 * @Description: 人员排班Mapper接口
 * @Author Hush. ultraman_zero@aliyun.com
 * @Date 2021/11/16
 * @Time 22:21
 */
@Mapper
public interface RzScheduleStaffPlanMapper {
    /**
     * 查询人员排班
     *
     * @param id 人员排班主键
     * @return 人员排班
     */
    public RzScheduleStaffPlan selectRzScheduleStaffPlanById(Long id);

    /**
     * 查询人员排班列表
     *
     * @param rzScheduleStaffPlan 人员排班
     * @return 人员排班集合
     */
    public List<RzScheduleStaffPlan> selectRzScheduleStaffPlanList(RzScheduleStaffPlan rzScheduleStaffPlan);

    /**
     * 查询工人某一天的排班表
     *
     * @param requestParam - 身份证IDs和用工日期
     * @return
     */
    public List<RzScheduleStaffPlan> selectRzScheduleStaffPlanListByIds(Map<String, Object> requestParam);

    public List<RzScheduleStaffPlan> selectRzScheduleStaffPlanListAttendance(RzScheduleStaffPlan rzScheduleStaffPlan);

    /**
     * 新增人员排班
     *
     * @param rzScheduleStaffPlan 人员排班
     * @return 结果
     */
    public int insertRzScheduleStaffPlan(RzScheduleStaffPlan rzScheduleStaffPlan);

    /**
     * 修改人员排班
     *
     * @param rzScheduleStaffPlan 人员排班
     * @return 结果
     */
    public int updateRzScheduleStaffPlan(RzScheduleStaffPlan rzScheduleStaffPlan);

    /**
     * 删除人员排班
     *
     * @param id 人员排班主键
     * @return 结果
     */
    public int deleteRzScheduleStaffPlanById(Long id);

    /**
     * 批量删除人员排班
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteRzScheduleStaffPlanByIds(Long[] ids);

    /**
     * 获取员工排班计划数量
     *
     * @param plan 参数
     * @return int
     */
    int count(RzScheduleStaffPlan plan);

    /**
     * 批量保存排班计划
     *
     * @param plans 排班计划
     * @return int
     */
    int insertBatchRzScheduleStaffPlan(List<RzScheduleStaffPlan> plans);

    /**
     * @author: 陈宇寰
     * @date: 2021-10-24 16:27:55
     * @params:
     * @return:
     * @description: 批量修改排班计划
     */
    int batchUpdatePlan(List<RzScheduleStaffPlan> plans);

    /**
     * 查询员工当日有无工作计划
     *
     * @param dto : 检索条件
     * @return RzScheduleStaffPlan
     * @author Hush.
     * @since 2021/11/21 13:00
     */
    RzScheduleStaffPlan selectStaffPlan(RzScheduleStaffPlan dto);

    /**
     * @author: 陈宇寰
     * @date: 2021-12-24 12:42:07
     * @params:
     * @return:
     * @description: 查询指定月份的排班信息
     */
    List<RzScheduleStaffPlan> staffPlanOnMonth(@Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 通过身份证,名称,员工id检索员工对象
     *
     * @param dto:检索条件
     * @return TermWorker 长期工对象
     * @author Hush.
     * @since 2021/11/21 13:30
     */
    List<TermWorker> selectStaffInTheSchedulingModule(RzScheduleStaffPlan dto);


    /**
     * 删除员工的排班计划
     *
     * @param dto:过滤条件(排班任务id 大于该排班日期)
     * @return int
     * @author Hush.
     * @since 2021/11/21 16:14
     */
    int deleteRzScheduleStaffPlan(RzScheduleStaffPlan dto);

    /**
     * 根据与主任务的关联数据
     *
     * @param taskIds:任务主表id
     * @return int
     * @author Hush.
     * @since 2021/11/22 18:11
     */
    int deleteRzScheduleTaskByTaskIds(Long[] taskIds);

    /**
     * 查询该任务下员工排班计划
     *
     * @param dto:检索条件
     * @return java.util.List<com.ruoyi.worker.domain.workAttendance.vo.SchedulePlanVO>
     * @author Hush.
     * @since 2021/11/21 19:00
     */
    List<SchedulePlanVO> selectStaffPlanGrouping(RzScheduleStaffPlan dto);

    /**
     * @author: 陈宇寰
     * @date: 2022-01-10 14:47:38
     * @params:
     * @return:
     * @description: 修改排班身份证
     */
    void updateIdCard(@Param("oldIdCard") String oldIdCard, @Param("newIdCard") String newIdCard);
}
